<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<meta name="description" content="This chapter covers all the exposed APIs of the USBX host classes.">
<title>Chapter 2: USBX Host Classes API</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
<h1>Chapter 2: USBX Host Classes API</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This chapter covers all the exposed APIs of the USBX host classes. The following APIs for each class are described in detail.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Printer class</p>
</li>
<li>
<p>Audio class</p>
</li>
<li>
<p>Asix class</p>
</li>
<li>
<p>Pima/PTP class</p>
</li>
<li>
<p>Prolific class</p>
</li>
<li>
<p>Generic Serial class</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_printer_read">ux_host_class_printer_read</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Read from the printer interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_printer_read(
    UX_HOST_CLASS_PRINTER *printer,
    UCHAR *data_pointer,
    ULONG requested_length,
    ULONG *actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description">Description</h3>
<div class="paragraph">
<p>This function reads from the printer interface. The call is blocking and only returns when there is either an error or when the transfer is complete. A read is allowed only on bi-directional printers.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>printer</strong>: Pointer to the printer class instance.</p>
</li>
<li>
<p><strong>data_pointer</strong>: Pointer to the buffer address of the data payload.</p>
</li>
<li>
<p><strong>requested_length</strong>: Length to be received.</p>
</li>
<li>
<p><strong>actual_length</strong>: Length actually received.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>:  (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported because the printer is not bi-directional.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, reading incomplete.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_printer_read(printer, data_pointer, requested_length, &amp;actual_length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_printer_write">ux_host_class_printer_write</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Write to the printer interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_2">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_printer_write(
    UX_HOST_CLASS_PRINTER *printer,
    UCHAR *data_pointer,
    ULONG requested_length,
    ULONG *actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_2">Description</h3>
<div class="paragraph">
<p>This function writes to the printer interface. The call is blocking and only returns when there is either an error or when the transfer is complete.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_2">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>printer</strong>: Pointer to the printer class instance.</p>
</li>
<li>
<p><strong>data_pointer</strong>: Pointer to the buffer address of the data payload.</p>
</li>
<li>
<p><strong>requested_length</strong>: Length to be sent.</p>
</li>
<li>
<p><strong>actual_length</strong>: Length actually sent.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_2">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, writing incomplete.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_2">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_printer_write(printer, data_pointer, requested_length, &amp;actual_length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_printer_soft_reset">ux_host_class_printer_soft_reset</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Perform a soft reset to the printer.</p>
</div>
<div class="sect2">
<h3 id="_prototype_3">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_printer_soft_reset(UX_HOST_CLASS_PRINTER *printer)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_3">Description</h3>
<div class="paragraph">
<p>This function performs a soft reset to the printer.</p>
</div>
</div>
<div class="sect2">
<h3 id="_input_parameter">Input Parameter</h3>
<div class="ulist">
<ul>
<li>
<p><strong>printer</strong>: Pointer to the printer class instance.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_3">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00)The reset was completed.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, reset not completed.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_3">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_printer_soft_reset(printer);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_printer_status_get">ux_host_class_printer_status_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get the printer status</p>
</div>
<div class="sect2">
<h3 id="_prototype_4">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_printer_status_get(
    UX_HOST_CLASS_PRINTER *printer,
    ULONG *printer_status)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_4">Description</h3>
<div class="paragraph">
<p>This function obtains the printer status. The printer status is similar to the LPT status (1284 standard).</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_3">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>printer</strong>: Pointer to the printer class instance.</p>
</li>
<li>
<p><strong>printer_status</strong>: Address of the status to be returned.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_4">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong> (0x00): The reset was completed.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to perform the operation.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, reset not completed</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_4">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_printer_status_get(printer, printer_status);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_printer_device_id_get">ux_host_class_printer_device_id_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get the printer device id.</p>
</div>
<div class="sect2">
<h3 id="_prototype_5">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_printer_device_id_get(
    UX_HOST_CLASS_PRINTER *printer,
    UCHAR *descriptor_buffer,
    ULONG length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_5">Description</h3>
<div class="paragraph">
<p>This function obtains the printer IEEE 1284 device ID string (including length in the first two bytes in big endian format).</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_4">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>printer</strong>: Pointer to the printer class instance.</p>
</li>
<li>
<p><strong>descriptor_buffer</strong>: Pointer to a buffer to fill IEEE 1284 device ID string (including length in the first two bytes in BE format)</p>
</li>
<li>
<p><strong>length</strong>: Length of buffer in bytes.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_5">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong> (0x00): The operation was successful.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to perform the operation.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, request not completed</p>
</li>
<li>
<p><strong>UX_TRANSFER_NOT_READY</strong>: (0x25) The device was in an invalid state&#8201;&#8212;&#8201;must be ATTACHED,ADDRESSED, or CONFIGURED.</p>
</li>
<li>
<p><strong>UX_TRANSFER_STALL</strong>: (0x21) Transfer stalled.</p>
</li>
<li>
<p><strong>TX_WAIT_ABORTED</strong> (0x1A) Suspension was aborted by another thread, timer, or ISR.</p>
</li>
<li>
<p><strong>TX_SEMAPHORE_ERROR</strong> (0x0C) Invalid counting semaphore pointer.</p>
</li>
<li>
<p><strong>TX_WAIT_ERROR</strong> (0x04) A wait option other than TX_NO_WAIT was specified on a call from a non-thread.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_5">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_printer_device_id_get(printer, descriptor_buffer, length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_read">ux_host_class_audio_read</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Read from the audio interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_6">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_read(
    UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_TRANSFER_REQUEST
    *audio_transfer_request)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_6">Description</h3>
<div class="paragraph">
<p>This function reads from the audio interface. The call is non-blocking. The application must ensure that the appropriate alternate setting has been selected for the audio streaming interface.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_5">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance.</p>
</li>
<li>
<p><strong>audio_transfer_request</strong>: Pointer to the audio transfer structure.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_6">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>" (0x54) Function not supported</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_6">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* The following example reads from the audio interface. */

audio_transfer_request.ux_host_class_audio_transfer_request_completion_function = tx_audio_transfer_completion_function;
audio_transfer_request.ux_host_class_audio_transfer_request_class_instance = audio;
audio_transfer_request.ux_host_class_audio_transfer_request_next_audio_audio_transfer_request = UX_NULL;
audio_transfer_request.ux_host_class_audio_transfer_request_data_pointer = audio_buffer;
audio_transfer_request.ux_host_class_audio_transfer_request_requested_length = requested_length;
audio_transfer_request.ux_host_class_audio_transfer_request_packet_length = AUDIO_FRAME_LENGTH;

status = ux_host_class_audio_read(audio, audio_transfer_request);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_write">ux_host_class_audio_write</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Write to the audio interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_7">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_write(
    UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_TRANSFER_REQUEST *audio_transfer_request)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_7">Description</h3>
<div class="paragraph">
<p>This function writes to the audio interface. The call is non-blocking. The application must ensure that the appropriate alternate setting has been selected for the audio streaming interface.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_6">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance</p>
</li>
<li>
<p><strong>audio_transfer_request</strong>: Pointer to the audio transfer structure</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_7">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported.</p>
</li>
<li>
<p><strong>ux_host_CLASS_AUDIO_WRONG_INTERFACE</strong>: (0x81) Interface incorrect.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_7">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example writes to the audio interface */

audio_transfer_request.ux_host_class_audio_transfer_request_completion_function = tx_audio_transfer_completion_function;
audio_transfer_request.ux_host_class_audio_transfer_request_class_instance = audio;
audio_transfer_request.ux_host_class_audio_transfer_request_next_audio_audio_transfer_request = UX_NULL;
audio_transfer_request.ux_host_class_audio_transfer_request_data_pointer = audio_buffer;
audio_transfer_request.ux_host_class_audio_transfer_request_requested_length = requested_length;
audio_transfer_request.ux_host_class_audio_transfer_request_packet_length = AUDIO_FRAME_LENGTH;
status = ux_host_class_audio_write(audio, audio_transfer_request);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_control_get">ux_host_class_audio_control_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get a specific control from the audio control interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_8">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_control_get(
    UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_CONTROL *audio_control)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_8">Description</h3>
<div class="paragraph">
<p>This function reads a specific control from the audio control interface.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_7">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance</p>
</li>
<li>
<p><strong>audio_control</strong>: Pointer to the audio control structure</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_8">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_AUDIO_WRONG_INTERFACE</strong>: (0x81) Interface incorrect</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_8">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example reads the volume control from a stereo USB speaker. */

UX_HOST_CLASS_AUDIO_CONTROL audio_control;

audio_control.ux_host_class_audio_control_channel = 1;
audio_control.ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL;

status = ux_host_class_audio_control_get(audio, &amp;audio_control);

/* If status equals UX_SUCCESS, the operation was successful. */

audio_control.ux_host_class_audio_control_channel = 2;
audio_control.ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL;

status = ux_host_class_audio_control_get(audio, &amp;audio_control);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_control_value_set">ux_host_class_audio_control_value_set</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Set a specific control to the audio control interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_9">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_control_value_set(
    UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_CONTROL *audio_control)</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>Description </strong></p>
</div>
<div class="paragraph">
<p>This function sets a specific control to the audio control interface.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_8">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance</p>
</li>
<li>
<p><strong>audio_control</strong>: Pointer to the audio control structure</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_9">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_AUDIO_WRONG_INTERFACE</strong>: (0x81) Interface incorrect</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_9">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* The following example sets the volume control of a stereo USB speaker. */

UX_HOST_CLASS_AUDIO_CONTROL audio_control;

UINT status;

audio_control.ux_host_class_audio_control_channel = 1;
audio_control.ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL;
audio_control.ux_host_class_audio_control_cur = 0xf000;

status = ux_host_class_audio_control_value_set(audio, &amp;audio_control);
/* If status equals UX_SUCCESS, the operation was successful. */

current_volume = audio_control.audio_control_cur;
audio_control.ux_host_class_audio_control_channel = 2;
audio_control.ux_host_class_audio_control = UX_HOST_CLASS_AUDIO_VOLUME_CONTROL;
audio_control.ux_host_class_audio_control_cur = 0xf000;

status = ux_host_class_audio_control_value_set(audio, &amp;audio_control);
/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_streaming_sampling_set">ux_host_class_audio_streaming_sampling_set</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Set an alternate setting interface of the audio streaming interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_10">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_streaming_sampling_set
    (UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_SAMPLING *audio_sampling)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_9">Description</h3>
<div class="paragraph">
<p>This function sets the appropriate alternate setting interface of the audio streaming interface according to a specific sampling structure.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_9">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance.</p>
</li>
<li>
<p><strong>audio_sampling</strong>: Pointer to the audio sampling structure.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_10">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_AUDIO_WRONG_INTERFACE</strong>: (0x81) Interface incorrect</p>
</li>
<li>
<p><strong>UX_NO_ALTERNATE_SETTING</strong>: (0x5e) No alternate setting for the sampling values</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_10">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* The following example sets the alternate setting interface of a stereo USB speaker. */

UX_HOST_CLASS_AUDIO_SAMPLING audio_sampling;

UINT status;

sampling.ux_host_class_audio_sampling_channels = 2;
sampling.ux_host_class_audio_sampling_frequency = AUDIO_FREQUENCY;
sampling. ux_host_class_audio_sampling_resolution = 16;

status = ux_host_class_audio_streaming_sampling_set(audio, &amp;sampling);
/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_audio_streaming_sampling_get">ux_host_class_audio_streaming_sampling_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get possible sampling settings of audio streaming interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_11">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_audio_streaming_sampling_get(
    UX_HOST_CLASS_AUDIO *audio,
    UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS *audio_sampling)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_10">Description</h3>
<div class="paragraph">
<p>This function gets, one by one, all the possible sampling settings available in each of the alternate settings of the audio streaming interface. The first time the function is used, all the fields in the calling structure pointer must be reset. The function will return a specific set of streaming values upon return unless the end of the alternate settings has been reached. When this function is reused, the previous sampling values will be used to find the next sampling values.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_10">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>audio</strong>: Pointer to the audio class instance.</p>
</li>
<li>
<p><strong>audio_sampling</strong>: Pointer to the audio sampling structure.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_11">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Function not supported</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_AUDIO_WRONG_INTERFACE</strong>: (0x81) Interface incorrect</p>
</li>
<li>
<p><strong>UX_NO_ALTERNATE_SETTING</strong>: (0x5e) No alternate setting for the sampling values</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_11">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* The following example gets the sampling values for the first alternate setting interface of a stereo USB speaker. */

UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS audio_sampling;

UINT status;

sampling.ux_host_class_audio_sampling_channels=0;
sampling.ux_host_class_audio_sampling_frequency_low=0;
sampling.ux_host_class_audio_sampling_frequency_high=0;
sampling.ux_host_class_audio_sampling_resolution=0;

status = ux_host_class_audio_streaming_sampling_get(audio, &amp;sampling);

/* If status equals UX_SUCCESS, the operation was successful and information could be displayed as follows:

printf("Number of channels %d, Resolution %d bits, frequency range %d-%d\n",
    sampling.audio_channels, sampling.audio_resolution,
    sampling.audio_frequency_low, sampling.audio_frequency_high);

*/</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_asix_read">ux_host_class_asix_read</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Read from the asix interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_12">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_asix_read(
    UX_HOST_CLASS_ASIX *asix,
    UCHAR *data_pointer,
    ULONG requested_length,
    ULONG *actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_11">Description</h3>
<div class="paragraph">
<p>This function reads from the asix interface. The call is blocking and only returns when there is either an error or when the transfer is complete.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_11">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>asix</strong>: Pointer to the asix class instance.</p>
</li>
<li>
<p><strong>data_pointer</strong>: Pointer to the buffer address of the data payload.</p>
</li>
<li>
<p><strong>requested_length</strong>: Length to be received.</p>
</li>
<li>
<p><strong>actual_length</strong>: Length actually received.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_12">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, reading incomplete.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_12">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */

status = ux_host_class_asix_read(asix, data_pointer, requested_length, &amp;actual_length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_asix_write">ux_host_class_asix_write</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Write to the asix interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_13">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_asix_write(
    VOID *asix_class,
    NX_PACKET *packet)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_12">Description</h3>
<div class="paragraph">
<p>This function writes to the asix interface. The call is non blocking.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_12">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>asix</strong>: Pointer to the asix class instance.</p>
</li>
<li>
<p><strong>packet</strong>: NetX Duo data packet</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_13">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_ERROR</strong>: (0xFF) Transfer could not be requested.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_13">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */

status = ux_host_class_asix_write(asix, packet);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_session_open">ux_host_class_pima_session_open</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Open a session between Initiator and Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_14">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_session_open(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_13">Description</h3>
<div class="paragraph">
<p>This function opens a session between a PIMA Initiator and a PIMA Responder. Once a session is successfully opened, most PIMA commands can be executed.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_13">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_14">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) Session successfully opened</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_ALREADY_OPENED</strong>: (0x201E) Session already opened</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_14">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Open a pima session. */

status = ux_host_class_pima_session_open(pima, pima_session);

if (status != UX_SUCCESS)
    return(UX_PICTBRIDGE_ERROR_SESSION_NOT_OPEN);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_session_close">ux_host_class_pima_session_close</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Close a session between Initiator and Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_15">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_session_close(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_14">Description</h3>
<div class="paragraph">
<p>This function closes a session that was previously opened between a PIMA Initiator and a PIMA Responder. Once a session is closed, most PIMA commands can no longer be executed.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_14">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_15">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The session was closed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_15">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Close the pima session. */

status = ux_host_class_pima_session_close(pima, pima_session);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_storage_ids_get">ux_host_class_pima_storage_ids_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Obtain the storage ID array from Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_16">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_storage_ids_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG *storage_ids_array,
    ULONG storage_id_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_15">Description</h3>
<div class="paragraph">
<p>This function obtains the storage ID array from the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_15">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>storage_ids_array</strong>: Array where storage IDs will be returned</p>
</li>
<li>
<p><strong>storage_id_length</strong>: Length of the storage array</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_16">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The storage ID array has been populated</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_16">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Get the number of storage IDs. */
status = ux_host_class_pima_storage_ids_get(pima, pima_session,
    pictbridge -&gt;ux_pictbridge_storage_ids, 64);

if (status != UX_SUCCESS)
{
    /* Close the pima session. */
    status = ux_host_class_pima_session_close(pima, pima_session);

    return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_storage_info_get">ux_host_class_pima_storage_info_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Obtain the storage information from Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_17">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_storage_info_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG storage_id,
    UX_HOST_CLASS_PIMA_STORAGE *storage)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_16">Description</h3>
<div class="paragraph">
<p>This function obtains the storage information for a storage container of value <em>storage_id</em>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_16">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>storage_id</strong>: ID of the storage container</p>
</li>
<li>
<p><strong>storage</strong>: Pointer to storage information container</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_17">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The storage information was retrieved</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong> (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_17">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Get the first storage ID info container. */
status = ux_host_class_pima_storage_info_get(pima, pima_session,
    pictbridge -&gt;ux_pictbridge_storage_ids[0],
    (UX_HOST_CLASS_PIMA_STORAGE *)pictbridge -&gt;ux_pictbridge_storage);

if (status != UX_SUCCESS)
{
    /* Close the pima session. */
    status = ux_host_class_pima_session_close(pictbridge -&gt;
        ux_pictbridge_pima, pima_session);
    return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_num_objects_get">ux_host_class_pima_num_objects_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Obtain the number of objects on a storage container from Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_18">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_num_objects_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG storage_id,
    ULONG object_format_code)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_17">Description</h3>
<div class="paragraph">
<p>This function obtains the number of objects stored on a specific storage container of value storage_id matching a specific format code. The number of objects is returned in the field: ux_host_class_pima_session_nb_objects of the pima_session structure.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_17">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>storage_id</strong>: ID of the storage container</p>
</li>
<li>
<p><strong>object_format_code</strong>: Objects format code filter.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The Object Format Codes can have one of the following values.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Object Format Code</th>
<th class="tableblock halign-left valign-top">Description</th>
<th class="tableblock halign-left valign-top">USBX code</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined Undefined non-image object</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_UNDEFINED</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3001</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Association Association (e.g. folder)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_ASSOCIATION</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3002</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Script Device-model specific script</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_SCRIPT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3003</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Executable Device model-specific binary executable</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_EXECUTABLE</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3004</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Text Text file</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_TEXT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3005</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">HTML HyperText Markup Language file (text)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_HTML</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3006</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">DPOF Digital Print Order Format file (text)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_DPOF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3007</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">AIFF Audio clip</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_AIFF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3008</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">WAV Audio clip</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_WAV</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3009</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MP3 Audio clip</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_MP3</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x300A</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">AVI Video clip</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_AVI</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x300B</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">MPEG Video clip</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_MPEG</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x300C</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ASF Microsoft Advanced Streaming Format (video)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_ASF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3800</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined Unknown image object</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_QT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3801</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">EXIF/JPEG Exchangeable File Format, JEIDA standard</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_EXIF_JPEG</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3802</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">TIFF/EP Tag Image File Format for Electronic Photography</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_TIFF_EP</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3803</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">FlashPix Structured Storage Image Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_FLASHPIX</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3804</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">BMP Microsoft Windows Bitmap file</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_BMP</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3805</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">CIFF Canon Camera Image File Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_CIFF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3806</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined Reserved</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3807</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">GIF Graphics Interchange Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_GIF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3808</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JFIF JPEG File Interchange Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_JFIF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3809</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">PCD PhotoCD Image Pac</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_PCD</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380A</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">PICT Quickdraw Image Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_PICT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380B</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">PNG Portable Network Graphics</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_PNG</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380C</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined Reserved</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380D</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">TIFF Tag Image File Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_TIFF</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380E</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">TIFF/IT Tag Image File Format for Information Technology (graphic arts)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_TIFF_IT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x380F</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JP2 JPEG2000 Baseline File Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_JP2</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x3810</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">JPX JPEG2000 Extended File Format</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UX_HOST_CLASS_PIMA_OFC_JPX</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">All other codes with MSN of 0011</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Any Undefined Reserved for future use</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">All other codes with MSN of 1011</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Any Vendor-Defined Vendor-Defined type: Image</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_return_value_18">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_18">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Get the number of objects on all containers matching a SCRIPT object. */
status = ux_host_class_pima_num_objects_get(pima, pima_session,
    UX_PICTBRIDGE_ALL_CONTAINERS, UX_PICTBRIDGE_OBJECT_SCRIPT);

if (status != UX_SUCCESS)
{
    /* Close the pima session. */
    status = ux_**host_class_pima_session_close(pima, pima_session);

    return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);
} else
    /* The number of objects is returned in the field: pima_session -&gt; ux_host_class_pima_session_nb_objects */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_handles_get">ux_host_class_pima_object_handles_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Obtain object handles from Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_19">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_handles_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG *object_handles_array,
    ULONG object_handles_length,
    ULONG storage_id,
    ULONG object_format_code,
    ULONG object_handle_association)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_18">Description</h3>
<div class="paragraph">
<p>Returns an array of Object Handles present in the storage container indicated by the storage_id parameter. If an aggregated list across all stores is desired, this value shall be set to 0xFFFFFFFF.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_18">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>object_handles_array</strong>: Array where handles are returned</p>
</li>
<li>
<p><strong>object_handles_length</strong>: Length of the array</p>
</li>
<li>
<p><strong>storage_id</strong>: ID of the storage container</p>
</li>
<li>
<p><strong>object_format_code</strong>: Format code for object (see table for function ux_host_class_pima_num_objects_get)</p>
</li>
<li>
<p><strong>object_handle_association</strong>: Optional object association value</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The object handle association can be one of the value from the table below:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 33.3333%;">
<col style="width: 33.3333%;">
<col style="width: 33.3334%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">AssociationCode</th>
<th class="tableblock halign-left valign-top">AssociationType</th>
<th class="tableblock halign-left valign-top">Interpretation</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0001</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">GenericFolder</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unused</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0002</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Album</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Reserved</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0003</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">TimeSequence</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">DefaultPlaybackDelta</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0004</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">HorizontalPanoramic</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unused</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0005</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">VerticalPanoramic</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unused</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0006</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2DPanoramic</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ImagesPerRow</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0x0007</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">AncillaryData</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">All other values with bit 15 set to 0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Reserved</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Undefined</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">All values with bit 15 set to 1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Vendor-Defined</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Vendor-Defined</p></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_return_value_19">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_19">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Get the array of objects handles on the container. */
status = ux_**host_class_pima_object_handles_get(pima, pima_session,
    pictbridge -&gt;ux_pictbridge_object_handles_array,
    4 * pima_session -&gt;ux_host_class_pima_session_nb_objects,
    UX_PICTBRIDGE_ALL_CONTAINERS,
    UX_PICTBRIDGE_OBJECT_SCRIPT, 0);

if (status != UX_SUCCESS)
{
    /* Close the pima session. */
    status = ux_host_class_pima_session_close(pima, pima_session);
    return(UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE);
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_info_get">ux_host_class_pima_object_info_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Obtain the object information from Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_20">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_info_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle,
    UX_HOST_CLASS_PIMA_OBJECT *object)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_19">Description</h3>
<div class="paragraph">
<p>This function obtains the object information for an object handle.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_19">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>object_handle</strong>: Handle of the object</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_20">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_20">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* We search for an object that is a picture or a script. */
object_index = 0;

while (object_index &lt; pima_session -&gt; ux_host_class_pima_session_nb_objects)
{
    /* Get the object info structure. */
    status = ux_**host_class_pima_object_info_get(pima, pima_session,
        pictbridge -&gt; ux_pictbridge_object_handles_array[object_index],
        pima_object);

    if (status != UX_SUCCESS)
    {
        /* Close the pima session. */
        status = ux_host_class_pima_session_close(pima, pima_session);

        return(UX_PICTBRIDGE_ERROR_INVALID_OBJECT_HANDLE );
    }
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_info_send">ux_host_class_pima_object_info_send</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Send the object information to Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_21">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_info_send(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG storage_id,
    ULONG parent_object_id,
    UX_HOST_CLASS_PIMA_OBJECT *object)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_20">Description</h3>
<div class="paragraph">
<p>This function sends the storage information for a storage container of value storage_id. The Initiator should use this command before sending an object to the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_20">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
<li>
<p><strong>storage_id</strong>: Destination storage ID.</p>
</li>
<li>
<p><strong>parent_object_id</strong>: Parent ObjectHandle on Responder where object should be placed.</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_21">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_21">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Send a script info. */
status = ux_host_class_pima_object_info_send(pima, pima_session,
    0, 0, pima_object);

if (status != UX_SUCCESS)
{
    /* Close the pima session. */
    status = ux_host_class_pima_session_close(pima, pima_session);

    return(UX_ERROR);
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_open">ux_host_class_pima_object_open</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Open an object stored in the Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_22">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_open(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle,
    UX_HOST_CLASS_PIMA_OBJECT *object)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_21">Description</h3>
<div class="paragraph">
<p>This function opens an object on the responder before reading or writing.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_21">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
<li>
<p><strong>object_handle</strong>: handle of the object.</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_22">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_OBJECT_ALREADY_OPENED</strong>: (0x2021) Object already opened.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_22">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Open the object. */

status = ux_host_class_pima_object_open(pima, pima_session,
    object_handle, pima_object);

/* Check status. */
if (status != UX_SUCCESS)
    return(status);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_get">ux_host_class_pima_object_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get an object stored in the Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_23">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle,
    UX_HOST_CLASS_PIMA_OBJECT *object,
    UCHAR *object_buffer,
    ULONG object_buffer_length,
    ULONG *object_actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_22">Description</h3>
<div class="paragraph">
<p>This function gets an object on the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_22">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>object_handle</strong>: handle of the object</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container</p>
</li>
<li>
<p><strong>object_buffer</strong>: Address of object data</p>
</li>
<li>
<p><strong>object_buffer_length</strong>: Requested length of object</p>
</li>
<li>
<p><strong>object_actual_length</strong>: Length of object returned</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_23">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The object was transferred</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED</strong>: (0x2023) Object not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED</strong>: (0x200f) Access to object denied</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER</strong>: (0x2007) Transfer is incomplete</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
<li>
<p><strong>UX_TRANSFER_ERROR</strong>: (0x23) Transfer error while reading object</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_23">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Open the object. */

status = ux_host_class_pima_object_open(pima, pima_session,
    object_handle, pima_object);

/* Check status. */
if (status != UX_SUCCESS)
    return(status);

/* Set the object buffer pointer. */
object_buffer = pima_object -&gt;ux_host_class_pima_object_buffer;

/* Obtain all the object data. */
while(object_length != 0)
{
    /* Calculate what length to request. */
    if (object_length &gt; UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER)
        /* Request maximum length. */
        requested_length = UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER;
    else
        /* Request remaining length. */
        requested_length = object_length;

    /* Get the object data. */
    status = ux_host_class_pima_object_get(pima, pima_session,
        object_handle, pima_object, object_buffer,
        requested_length, &amp;actual_length);

    if (status != UX_SUCCESS)
    {
        /* We had a problem, abort the transfer. */
        ux_host_class_pima_object_transfer_abort(pima, pima_session,
            object_handle, pima_object);

        /* And close the object. */
        ux_host_class_pima_object_close(pima, pima_session,
            object_handle, pima_object, object);

        return(status);

    }

    /* We have received some data, update the length remaining. */
    object_length -= actual_length;

    /* Update the buffer address. */
    object_buffer += actual_length;

}

/* Close the object. */
status = ux_host_class_pima_object_close(pima, pima_session,
    object_handle, pima_object, object);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_send">ux_host_class_pima_object_send</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Send an object stored in the Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_24">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_send(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    UX_HOST_CLASS_PIMA_OBJECT *object,
    UCHAR *object_buffer, ULONG object_buffer_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_23">Description</h3>
<div class="paragraph">
<p>This function sends an object to the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_23">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>object_handle</strong>: handle of the object</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container</p>
</li>
<li>
<p><strong>object_buffer</strong>: Address of object data</p>
</li>
<li>
<p><strong>object_buffer_length</strong>: Requested length of object</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_24">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED</strong>: (0x2023) Object not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED</strong>: (0x200f) Access to object denied</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER</strong>: (0x2007) Transfer is incomplete</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
<li>
<p><strong>UX_TRANSFER_ERROR</strong>: (0x23) Transfer error while writing object</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_24">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Open the object. */
status = ux_host_class_pima_object_open(pima, pima_session,
    object_handle, pima_object);

/* Get the object length. */
object_length = pima_object -&gt;ux_host_class_pima_object_compressed_size;

/* Recall the object buffer address. */
pima_object_buffer = pima_object -&gt;ux_host_class_pima_object_buffer;

/* Send all the object data. */
while(object_length != 0)
{
    /* Calculate what length to request. */
    if (object_length &gt; UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER)
        /* Request maximum length. */
        requested_length = UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER;
    else
        /* Request remaining length. */
        requested_length = object_length;

    /* Send the object data. */
    status = ux_host_class_pima_object_send(pima,
        pima_session, pima_object,
        pima_object_buffer, requested_length);

    if (status != UX_SUCCESS)
    {
        /* Abort the transfer. */
        ux_host_class_pima_object_transfer_abort(pima, pima_session,
            object_handle, pima_object);

        /* Return status. */
        return(status);
    }

    /* We have sent some data, update the length remaining. */
    object_length -= requested_length;
}

/* Close the object. */
status = ux_host_class_pima_object_close(pima, pima_session, object_handle,
    pima_object, object);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_thumb_get">ux_host_class_pima_thumb_get</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Get a thumb object stored in the Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_25">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_thumb_get(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle,
    UX_HOST_CLASS_PIMA_OBJECT *object,
    UCHAR *thumb_buffer, ULONG thumb_buffer_length,
    ULONG *thumb_actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_24">Description</h3>
<div class="paragraph">
<p>This function gets a thumb object on the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_24">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
<li>
<p><strong>object_handle</strong>: handle of the object.</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object information container.</p>
</li>
<li>
<p><strong>thumb_buffer</strong>: Address of thumb object data.</p>
</li>
<li>
<p><strong>thumb_buffer_length</strong>: Requested length of thumb object.</p>
</li>
<li>
<p><strong>thumb_actual_length</strong>: Length of thumb object returned.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_25">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED</strong>: (0x2023) Object not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED</strong>: (0x200f) Access to object denied.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER</strong>: (0x2007) Transfer is incomplete.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
<li>
<p><strong>UX_TRANSFER_ERROR</strong>: (0x23) Transfer error while reading object.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_25">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Get the thumb object data. */

status = ux_host_class_pima_thumb_get(pima, pima_session,
    object_handle, pima_object, object_buffer,
    requested_length, &amp;actual_length);

if (status != UX_SUCCESS)
{
    /* And close the object. */
    ux_host_class_pima_object_close(pima, pima_session, object_handle, pima_object, object);

    return(status);
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_delete">ux_host_class_pima_object_delete</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Delete an object stored in the Responder.</p>
</div>
<div class="sect2">
<h3 id="_prototype_26">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_delete(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_25">Description</h3>
<div class="paragraph">
<p>This function deletes an object on the responder</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_25">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session</p>
</li>
<li>
<p><strong>object_handle</strong>: handle of the object</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_26">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The object was deleted.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED</strong>: (0x200f) Cannot delete object.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_26">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Delete the object. */
status = ux_host_class_pima_object_delete(pima, pima_session, object_handle, pima_object);

/* Check status. */
if (status != UX_SUCCESS)
    return(status);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_pima_object_close">ux_host_class_pima_object_close</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Close an object stored in the Responder</p>
</div>
<div class="sect2">
<h3 id="_prototype_27">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_pima_object_close(
    UX_HOST_CLASS_PIMA *pima,
    UX_HOST_CLASS_PIMA_SESSION *pima_session,
    ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_26">Description</h3>
<div class="paragraph">
<p>This function closes an object on the responder.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_26">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>pima</strong>: Pointer to the pima class instance.</p>
</li>
<li>
<p><strong>pima_session</strong>: Pointer to PIMA session.</p>
</li>
<li>
<p><strong>object_handle</strong>: Handle of the object.</p>
</li>
<li>
<p><strong>object</strong>: Pointer to object.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_27">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The object was closed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN</strong>: (0x2003) Session not opened.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED</strong>: (0x2023) Object not opened.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory to create PIMA command.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_27">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Close the object. */
status = ux_host_class_pima_object_close(pima, pima_session, object_handle, object);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_gser_read">ux_host_class_gser_read</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Read from the generic serial interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_28">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_gser_read(
    UX_HOST_CLASS_GSER *gser,
    ULONG interface_index,
    UCHAR *data_pointer,
    ULONG requested_length,
    ULONG *actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_27">Description</h3>
<div class="paragraph">
<p>This function reads from the generic serial interface. The call is blocking and only returns when there is either an error or when the transfer is complete.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_27">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>gser</strong>: Pointer to the gser class instance.</p>
</li>
<li>
<p><strong>interface_index</strong>: Interface index to read from.</p>
</li>
<li>
<p><strong>data_pointer</strong>: Pointer to the buffer address of the data payload.</p>
</li>
<li>
<p><strong>requested_length</strong>: Length to be received.</p>
</li>
<li>
<p><strong>actual_length</strong>: Length actually received.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_28">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, reading incomplete.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_28">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_gser_read(cdc_acm, interface_index,data_pointer, requested_length, &amp;actual_length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_gser_write">ux_host_class_gser_write</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Write to the generic serial interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_29">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_gser_write(
    UX_HOST_CLASS_GSER *gser,
    ULONG interface_index,
    UCHAR *data_pointer,
    ULONG requested_length,
    ULONG *actual_length)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_28">Description</h3>
<div class="paragraph">
<p>This function writes to the generic serial interface. The call is blocking and only returns when there is either an error or when the transfer is complete.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_28">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>gser</strong>: Pointer to the gser class instance.</p>
</li>
<li>
<p><strong>interface_index</strong>: Interface to which to write.</p>
</li>
<li>
<p><strong>data_pointer</strong>: Pointer to the buffer address of the data payload.</p>
</li>
<li>
<p><strong>requested_length</strong>: Length to be sent.</p>
</li>
<li>
<p><strong>actual_length</strong>: Length actually sent.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_29">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_TRANSFER_TIMEOUT</strong>: (0x5c) Transfer timeout, writing incomplete.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_29">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */
status = ux_host_class_cdc_acm_write(gser, data_pointer, requested_length, &amp;actual_length);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_gser_ioctl">ux_host_class_gser_ioctl</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Perform an IOCTL function to the generic serial interface.</p>
</div>
<div class="sect2">
<h3 id="_prototype_30">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_gser_ioctl(
    UX_HOST_CLASS_GSER *gser,
    ULONG ioctl_function,
    VOID *parameter)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_29">Description</h3>
<div class="paragraph">
<p>This function performs a specific ioctl function to the gser interface. The call is blocking and only returns when there is either an error or when the command is completed.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_29">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>gser</strong>: Pointer to the gser class instance.</p>
</li>
<li>
<p><strong>ioctl_function</strong>: ioctl function to be performed. See table below for one of the allowed ioctl functions.</p>
</li>
<li>
<p><strong>parameter</strong>: Pointerto a parameter specific to the ioctl</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_30">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong>: (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_MEMORY_INSUFFICIENT</strong>: (0x12) Not enough memory.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_UNKNOWN</strong>: (0x59) Wrong class instance</p>
</li>
<li>
<p><strong>UX_FUNCTION_NOT_SUPPORTED</strong>: (0x54) Unknown IOCTL function.</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_ioctl_functions">IOCTL functions</h3>
<div class="ulist">
<ul>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_SET_LINE_CODING</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_GET_LINE_CODING</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_SET_LINE_STATE</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_SEND_BREAK</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_ABORT_IN_PIPE</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_ABORT_OUT_PIPE</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_NOTIFICATION_CALLBACK</p>
</li>
<li>
<p>UX_HOST_CLASS_GSER_IOCTL_GET_DEVICE_STATUS</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_30">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT status;

/* The following example illustrates this service. */

status = ux_host_class_gser_ioctl(gser,
    UX_HOST_CLASS_GSER_IOCTL_GET_LINE_CODING,
    (VOID *)&amp;line_coding);

/* If status equals UX_SUCCESS, the operation was successful. */</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_gser_reception_start">ux_host_class_gser_reception_start</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Start reception on the generic serial interface</p>
</div>
<div class="sect2">
<h3 id="_prototype_31">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_gser_reception_start(
    UX_HOST_CLASS_GSER *gser,
    UX_HOST_CLASS_GSER_RECEPTION *gser_reception)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_30">Description</h3>
<div class="paragraph">
<p>This function starts the reception on the generic serial class interface. This function allows for non-blocking reception. When a buffer is received, a callback in invoked into the application.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_30">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>gser</strong> Pointer to the gser class instance.</p>
</li>
<li>
<p><strong>gser_reception</strong> Structure containing the reception parameters</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_31">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong> (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_UNKNOWN</strong> (0x59) Wrong class instance</p>
</li>
<li>
<p><strong>UX_ERROR</strong> (0x01) Error</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_31">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Start the reception for gser. AT commands are on interface 2. */
gser_reception.ux_host_class_gser_reception_interface_index =
    UX_DEMO_GSER_AT_INTERFACE;
gser_reception.ux_host_class_gser_reception_block_size =
    UX_DEMO_RECEPTION_BLOCK_SIZE;
gser_reception.ux_host_class_gser_reception_data_buffer =
    gser_reception_buffer;
gser_reception.ux_host_class_gser_reception_data_buffer_size =
    UX_DEMO_RECEPTION_BUFFER_SIZE;
gser_reception.ux_host_class_gser_reception_callback =
    tx_demo_thread_callback;

ux_host_class_gser_reception_start(gser, &amp;gser_reception);</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_ux_host_class_gser_reception_stop">ux_host_class_gser_reception_stop</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Stop reception on the generic serial interface</p>
</div>
<div class="sect2">
<h3 id="_prototype_32">Prototype</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">UINT ux_host_class_gser_reception_stop(
    UX_HOST_CLASS_GSER *gser,
    UX_HOST_CLASS_GSER_RECEPTION *gser_reception)</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_description_31">Description</h3>
<div class="paragraph">
<p>This function stops the reception on the generic serial class interface.</p>
</div>
</div>
<div class="sect2">
<h3 id="_parameters_31">Parameters</h3>
<div class="ulist">
<ul>
<li>
<p><strong>gser</strong> Pointer to the gser class instance.</p>
</li>
<li>
<p><strong>gser_reception</strong> Structure containing the reception parameters</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_return_value_32">Return Value</h3>
<div class="ulist">
<ul>
<li>
<p><strong>UX_SUCCESS</strong> (0x00) The data transfer was completed.</p>
</li>
<li>
<p><strong>UX_HOST_CLASS_UNKNOWN</strong> (0x59) Wrong class instance</p>
</li>
<li>
<p><strong>UX_ERROR</strong> (0x01) Error</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_example_32">Example</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-C" data-lang="C">/* Stops the reception for gser. */
ux_host_class_gser_reception_stop(gser, &amp;gser_reception);</code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2025-02-07 08:25:21 UTC
</div>
</div>
</body>
</html>